package com.cpic.nonauto.bloomfilter.lock;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * redis分布式锁
 *
 * @author admire
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RedisLock {

    /**
     * 业务键
     *
     * @return
     */
    String keyPrefix() default "redisLock:";

    /**
     * 线程锁Key
     * 格式为"args[0].xxx.xxx.xxx"
     *
     * @return
     */
    String keyExpression();

    /**
     * 是否阻塞锁
     * true 阻塞一定时间
     * false立即返回
     *
     * @return
     */

    boolean isBlocking() default true;

    /**
     * 锁超时时间，超过时间则锁失效
     *
     * @return
     */
    long expireTime() default RedisLockHelper.DEFAULT_LOCK_EXPIRE_MILLIS;

    /**
     * 尝试加锁，最多等待时间
     *
     * @return
     */
    long waitTime() default RedisLockHelper.DEFAULT_LOCK_WAIT_MILLIS;

    /**
     * 阻塞时重试时间
     *
     * @return
     */
    long retrySleepTime() default RedisLockHelper.DEFAULT_LOCK_SLEEP_MILLIS;
}
